package co.yixiang.yshop.module.product.service.productcouponrelation;


import co.yixiang.yshop.module.product.controller.app.couponrelation.vo.CartCouponVO;
import co.yixiang.yshop.module.product.controller.app.couponrelation.vo.UserCouponVO;
import co.yixiang.yshop.module.product.dal.dataobject.productcouponrelation.ProductCouponRelationDO;
import co.yixiang.yshop.module.product.service.productcouponrelation.dto.CartCouponDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;


/**
 * App优惠券记录 Service 接口
 *
 * @author moxiangrong
 */
public interface AppCouponRelationService extends IService<ProductCouponRelationDO> {

    /**
     * 领取优惠券
     *
     * @param id     优惠券id
     * @param userId
     * @return
     */
    Boolean receiveCoupon(Long id, Long userId);
    /**
     * 通过兑换码来领取优惠券
     * @param code
     * @param userId
     */
    Boolean receiveCouponByCode(String code,Long userId);


    /**
     * 核销优惠券
     *
     * @param id 优惠券明细id
     * @return
     */
    void verificationCoupon(Long id);

    /**
     * 回退优惠券
     *
     * @param id 优惠券明细id
     * @return
     */
    void returnCoupon(Long id);

    /**
     * 查询用户已有优惠券
     *
     * @param type 查询类型 1、可使用，2、已使用，3、已失效
     * @param id   优惠券id
     * @return
     */
    List<UserCouponVO> searchUserCoupon(Integer type, Long id);

    /**
     * 查询购物车可用优惠券
     *
     * @param cartCouponDtoList 购物车信息
     * @return
     */
    List<CartCouponVO> searchCartCoupon(List<CartCouponDTO> cartCouponDtoList, Long id);

    /**
     * 获取优惠券可用商品id合集
     *
     * @param id 优惠券明细id
     * @return
     */
    List<Long> getProductIdList(Long id);

    /**
     * 获取优惠券数量
     *
     * @param userId 用户id
     */
    Integer getCouponNumber(Long userId);

    /**
     * 获取已领取优惠券数量
     *
     * @param id  优惠券id
     * @param uid 用户id
     * @return /
     */
    long getReceivedCount(Long id, Long uid);

}
